package gui;

import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.ResourceBundle;

import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JRadioButton;
import javax.swing.JOptionPane;

import domein.DomeinController;
import domein.Keuze;
import domein.Vraag;
import domein.Vragen;

public class VoetafdrukVragen extends javax.swing.JPanel {
	
	private DomeinController domeinController;
	private String taal;
	private Vragen vragen;
	private Map<String, JLabel> labelsVragen;
	private Map<String, List<JRadioButton>> radioVragen;
	private Map<String, ButtonGroup> radioGroupsVragen;
	private Map<String, Double> gewichtVragen;
	private int yPositieLabels = -20;
	private JButton btnBereken;
	private VoetafdrukFrame frame;
	private ResourceBundle bundle;
	
	public VoetafdrukVragen(DomeinController domeinController, String taal, VoetafdrukFrame frame, ResourceBundle bundle) throws IllegalStateException, SQLException, ClassNotFoundException {
		super();
		this.domeinController = domeinController;
		this.taal = taal;
		this.vragen = domeinController.getVragen(taal);
		this.labelsVragen = new HashMap<String, JLabel>();
		this.radioVragen = new HashMap<String, List<JRadioButton>>();
		this.radioGroupsVragen = new HashMap<String, ButtonGroup>();
		this.gewichtVragen = new HashMap<String, Double>();
		this.frame = frame;
		this.bundle = bundle;
		initGUI();
	}
	
	private void initGUI() {
		try {
			this.setLayout(null);
			
			for(Map.Entry<String, Vraag> entry : vragen.getVragen().entrySet()) {
				Vraag vraag = entry.getValue();
				
				labelsVragen.put(Integer.toString(vraag.getNrVraag()), new JLabel());
				this.add(labelsVragen.get(Integer.toString(vraag.getNrVraag())));
				labelsVragen.get(Integer.toString(vraag.getNrVraag())).setText(vraag.getVraag());
				labelsVragen.get(Integer.toString(vraag.getNrVraag())).setBounds(24, yPositieLabels+=30, 300, 24);
				labelsVragen.get(Integer.toString(vraag.getNrVraag())).setForeground(new java.awt.Color(255,255,255));
				labelsVragen.get(Integer.toString(vraag.getNrVraag())).setFont(new java.awt.Font("Dialog",1,12));
				
				radioGroupsVragen.put(Integer.toString(vraag.getNrVraag()), new ButtonGroup());
				
				Iterator iterator = vraag.getKeuzes().iterator();
				while(iterator.hasNext()){
					Keuze keuze = (Keuze) iterator.next();
					JRadioButton rn = new JRadioButton(Double.toString(keuze.getGewicht()));
					
					rn.setText(keuze.getKeuzeAntw());
					rn.setBounds(30, yPositieLabels+=20, 500, 20);
					rn.setForeground(new java.awt.Color(255,255,255));
					this.add(rn);
					
					radioVragen.put(Integer.toString(vraag.getNrVraag()), new ArrayList<JRadioButton>());
					radioVragen.get(Integer.toString(vraag.getNrVraag())).add(rn);
					
					radioGroupsVragen.get(Integer.toString(vraag.getNrVraag())).add(rn);
					
					rn.addItemListener( new RadioButtonHandler(vraag.getNrVraag(), keuze.getGewicht()));
				}
			}
			
			btnBereken = new JButton();
			this.add(btnBereken);
			btnBereken.setText(bundle.getString("btn_berekenVoetafdruk"));
			btnBereken.setBounds(200, yPositieLabels+=40, 180, 34);
			btnBereken.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent evt) {
					double totaal = 0;
					int sizeGewicht = gewichtVragen.size();
					int sizeVragen = vragen.getVragen().size();
					
					if(sizeGewicht == sizeVragen){
						for(Map.Entry<String, Double> entry : gewichtVragen.entrySet()) {
							totaal += entry.getValue();
						}
						
						try {
							frame.showResult(totaal);
						} 
						catch (IllegalStateException e) { } 
						catch (SQLException e) { } 
						catch (ClassNotFoundException e) { }
					} else {
						JOptionPane.showMessageDialog(null,bundle.getString("error_vragen"), "Error", JOptionPane.ERROR_MESSAGE);
					}
				}
			});
			
			this.setPreferredSize(new Dimension(550,yPositieLabels+=60));
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	private class RadioButtonHandler implements ItemListener {
		private int vraag;
		private double gewicht;
		
		public RadioButtonHandler(int vraag, double gewicht){
			this.vraag = vraag;
			this.gewicht = gewicht;
		}
		
		public void itemStateChanged(ItemEvent event){
			gewichtVragen.put(Integer.toString(vraag), gewicht);
		}
	}

}
